package br.com.fiap.vendas.web.controller;

import br.com.fiap.vendas.business.delegate.ClienteDelegate;
import br.com.fiap.vendas.business.delegate.PedidoDelegate;
import br.com.fiap.vendas.business.delegate.ProdutoDelegate;
import br.com.fiap.vendas.business.exception.ServiceException;
import br.com.fiap.vendas.business.vo.PedidoVO;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import java.util.List;

/**
 * Created by jeferson on 1/26/14.
 */
@Controller
@RequestMapping("/pedido")
public class PedidoController {

    private Logger log = Logger.getLogger(PedidoController.class);
    private PedidoDelegate delegate;
    private ClienteDelegate clienteDelegate;
    private ProdutoDelegate produtoDelegate;

    public PedidoController() {
        if (delegate == null) {
            delegate = new PedidoDelegate();
        }
        if (clienteDelegate == null) {
            clienteDelegate = new ClienteDelegate();
        }
        if (produtoDelegate == null) {
            produtoDelegate = new ProdutoDelegate();
        }
    }

    // Quando abrir url direto pelo browser redireciona para a tela de cadastro.
    @RequestMapping(method = RequestMethod.GET, value = "/inserirPedido.do")
    public String iniciarCadastro(Model request) {
        try {
            log.info("iniciando busca de pedidos.");
            buscarPedidos(request);
            request.addAttribute("clienteVOList", clienteDelegate.listarClientes());
            request.addAttribute("produtoVOList", produtoDelegate.listarProdutos());

        } catch (ServiceException e) {
            request.addAttribute("mensagem", "Erro:" + e.getMessage());
        }
        return "inserirPedido";
    }

    private List<PedidoVO> buscarPedidos(Model request)
            throws ServiceException {
        List<PedidoVO> produtos = delegate.listarPedidos();
        log.info("pedidos encontrados[." + produtos.size() + "].");
        request.addAttribute("pedidoVOList", produtos);
        return produtos;
    }

    @RequestMapping(method = RequestMethod.POST, value = "/inserirPedido.do")
    public String inserirUsuario(@ModelAttribute PedidoVO pedidoVO,
                                 Model request) {
        try {
            log.info("inserindo pedido:" + pedidoVO.toString());

            pedidoVO.setStatus("Aprovado");
            delegate.inserirPedido(pedidoVO);
            buscarPedidos(request);
            request.addAttribute("clienteVOList", clienteDelegate.listarClientes());
            request.addAttribute("produtoVOList", produtoDelegate.listarProdutos());

        } catch (ServiceException e) {
            request.addAttribute("mensagem",
                    "Ocorreu um erro inserir pedido!");
        }
        request.addAttribute("mensagem", "Pedido Cadastrado com sucesso!");
        return "inserirPedido";
    }
}
